﻿using System;
using System.Windows.Forms;
using Calc.log;

namespace Calc.form
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        #region Описание переменных

        /*
         * В этом блоке программы идет описание переменных, где
         * Znak - Определяет знак, вводимый с кнопки
         * Number1,Number2 - Первое и второе число
         */
        public string Znak;
        public double Number1;
        public double Number2;
        public double Ras;
        public double Sub;
        public Boolean FlagC = false;
        public Boolean FlagZap = true;
        public Boolean FlagS = true;
        public Boolean FlagZero = true;

        #endregion

        #region Ввод цифр

        /*
         * По нажанию на кнопку с цифрой в поле ввода
         * вводится цифра, соответствующая кнопке
         */
        
        private void ButtonAddZero(object sender, EventArgs e)
        {
            if (FlagC && FlagZero)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}0", textBox1.Text);
                FlagC = false;
                FlagZero = false;
            }
            else if (FlagC == false && FlagZero)
            {
                textBox1.Text = string.Format("{0}0", textBox1.Text);
                FlagZero = false;
            }
            else if (textBox1.Text != "" && FlagZap == false)
            {
                textBox1.Text = string.Format("{0}0", textBox1.Text);
            }
            else if (textBox1.Text != "" && textBox1.Text != "0")
            {
                textBox1.Text = string.Format("{0}0", textBox1.Text);
            }
        }

        private void ButtonAddOne(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}1", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}1", textBox1.Text);
            }
        }

        private void ButtonAddTwo(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}2", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}2", textBox1.Text);
            }

        }

        private void ButtonAddThree(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}3", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}3", textBox1.Text);
            }
        }

        private void ButtonAddFour(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}4", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}4", textBox1.Text);
            }
        }

        private void ButtonAddFive(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}5", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}5", textBox1.Text);
            }
        }

        private void ButtonAddSix(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}6", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}6", textBox1.Text);
            }
        }

        private void ButtonAddSeven(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}7", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}7", textBox1.Text);
            }
        }

        private void ButtonAddEight(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}8", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}8", textBox1.Text);
            }
        }

        private void ButtonAddNine(object sender, EventArgs e)
        {
            if (FlagC)
            {
                textBox1.Text = "";
                textBox1.Text = string.Format("{0}9", textBox1.Text);
                FlagC = false;
            }
            else if (FlagC == false)
            {
                textBox1.Text = string.Format("{0}9", textBox1.Text);
            }

        }

        private void ButtonAddZap(object sender, EventArgs e)
        {

            if (textBox1.Text != "" && FlagZap)
            {
                textBox1.Text = string.Format("{0},", textBox1.Text);
                FlagZap = false;
                FlagC = false;
            }
            else if (textBox1.Text != "" && FlagZap)
            {
                textBox1.Text = string.Format("{0},", textBox1.Text);
                FlagZap = false;
            }
            else if (textBox1.Text == "" && FlagZap)
            {
                textBox1.Text = string.Format("{0}0,", textBox1.Text);
                FlagZap = false;
            }

        }

        private void SubAdd(object sender, EventArgs e)
        {
            if (FlagS == false && textBox1.Text != "" && textBox1.Text != "0" && textBox1.Text != "0,")
            {
                Sub = Convert.ToDouble(textBox1.Text);
                textBox1.Text = Convert.ToString(Sub*(-1));
                FlagS = false;
            }
            if (FlagS == true && textBox1.Text != "" && textBox1.Text != "0" && textBox1.Text != "0,")
            {
                Sub = Convert.ToDouble(textBox1.Text);
                textBox1.Text = Convert.ToString(Sub*(-1));
                FlagS = false;
            }
        }




        #endregion

        #region Нажатие на кнопку с методом

        /* 
         * Операции: сложение, вычитание, умножение, деление:
         * при нажатии на кнопку с соответствующей операцией
         * переменной Znak передается соответствующее значение
         * (+,-,*,/) по значению этой переменной будет известно,
         * какое действие следует выполнить методу MatMet
        */

        //Сложение
        private void ButtonPlus(object sender, EventArgs e)
        {

            if (textBox1.Text != "" && Number1 == 0)
            {
                Number1 = Convert.ToDouble(textBox1.Text);
                textBox1.Text = "";
                Znak = "+";
                FlagC = false;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak == "+")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak != "+")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
                Znak = "+";
            }

        }

        #region

        //Вычитание
        private void ButtonMinus(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && Number1 == 0)
            {
                Number1 = Convert.ToDouble(textBox1.Text);
                textBox1.Text = "";
                Znak = "-";
                FlagC = false;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak == "-")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak != "-")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
                Znak = "-";
            }
        }

        //Умножение
        private void ButtonYmnog(object sender, EventArgs e)
        {

            if (textBox1.Text != "" && Number1 == 0)
            {
                Number1 = Convert.ToDouble(textBox1.Text);
                textBox1.Text = "";
                Znak = "*";
                FlagC = false;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak == "*")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak != "*")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
                Znak = "*";
            }
        }

        //Деление
        private void ButtonDelenie(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && Number1 == 0)
            {
                Number1 = Convert.ToDouble(textBox1.Text);
                textBox1.Text = "";
                Znak = "/";
                FlagC = false;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak == "/")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
            }
            if (textBox1.Text != "" && Number2 == 0 && Number1 != 0 && Znak != "/")
            {
                Number2 = Convert.ToDouble(textBox1.Text);
                Number1 = Operations.MatMet(Number1, Number2, Znak);
                Number2 = 0;
                textBox1.Text = Convert.ToString(Number1);
                FlagC = true;
                FlagZap = true;
                Znak = "/";
            }
        }

        //Деление числа на 1
        private void ButtonDelenie1(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
                textBox1.Text = Convert.ToString(Operations.Del1(Convert.ToDouble(textBox1.Text)));
        }

        //Квадратный корень
        private void ButtonKoren(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
                textBox1.Text = Convert.ToString(Operations.Koren(Convert.ToDouble(textBox1.Text)));
        }

        #endregion

        //Очистка поля для ввода
        private void ButtonClear(object sender, EventArgs e)
        {
            textBox1.Text = "0";
            FlagC = true;
            FlagZap = true;
        }

        //Обнулить значения всех переменных
        private void ButtonClearAll(object sender, EventArgs e)
        {
            textBox1.Text = "0";
            Znak = "";
            Number1 = 0;
            Number2 = 0;
            FlagC = true;
            FlagZap = true;
        }

        #endregion

        #region Кнопка Равно

        /*
         * При нажатии на эту кнопку программа выдаст правильный ответ
         */

        private void ButtonEqual(object sender, EventArgs e)
        {
            try
            {
                if (textBox1.Text != "" && Number2 == 0 && Number1 != 0)
                {
                    Number2 = Convert.ToDouble(textBox1.Text);
                    if (Number1 != 0 && Number2 == 0 && Znak == "/" || Number1 == 0 && Number2 != 0 && Znak == "/")
                    {
                       throw new DivideByZeroException();
                    }
                    Number1 = Operations.MatMet(Number1, Number2, Znak);

                    Number2 = 0;
                    textBox1.Text = Convert.ToString(Number1);
                    FlagC = true;
                    Number1 = 0;
                    FlagZap = true;

                    if (Number1 != 0)
                    {
                        textBox1.Text = Convert.ToString(Number1);
                        FlagC = true;
                        Number1 = 0;
                        FlagZap = true;
                    }
                }
            }
            catch (System.DivideByZeroException) 
            {
                if (Number1 != 0 && Number2 == 0 && Znak == "/" || Number1 == 0 && Number2 != 0 && Znak == "/")
                {
                    MessageBox.Show("На ноль делить нельзя");
                }
            }
            
        }

    }
        #endregion
}





    








































































/*
 * This code was written by Joker.
*/